package com.yangli.leecode.mashib.interview;

/**
 * @Description
 * @Author liyang
 * @Date 2023/3/10 13:35
 */
public class FortyFour {
    public static void main(String[] args){
        System.out.println(FortyFour.maxMultiply(new double[]{3, 0.1, -2, 2, 7, 0.01, 12, -1, -3}));

    }

    //连续子数组==>转换为以某个位置为结尾的极值问题==>需要最大值也需要最小值==>空间滚动，节省空间
    public static double maxMultiply(double[] arr){
        if (arr == null || arr.length == 0) {
            return 0;
        }
        double max = arr[0];
        double min = arr[0];
        double ans = arr[0];
        for (int i = 1; i < arr.length; i++) {
            //i为结束位置，最大值又三种可能，前面的最大值为小数，则最大值为自身;自身为正数乘以前面的最大值;自身为负数乘以前面的最小值
            double p1 = arr[i];
            double p2 = arr[i] * max;
            double p3 = arr[i] * min;

            max = Math.max(Math.max(p1, p2), p3);
            min = Math.min(Math.min(p1, p2), p3);
            ans = Math.max(ans, max);

        }
        return ans;
    }

}
